/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.ItemPedido;

import model.Pedido;
import model.Produto;

/**
 *
 * @author Alex
 */
public class ItemPedidoDAO {

    public boolean criar(ItemPedido itemPedido, Pedido pedido) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "insert into item_pedido(codigo_produto,id_pedido,valor, quantidade) values (?,?,?,?)";
        // seta os parametros no sql
        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setString(1, itemPedido.getProduto().getCodigo());
        pstmt.setInt(2, pedido.getId());
        pstmt.setDouble(3, itemPedido.getValor());
        pstmt.setInt(4, itemPedido.getQuantidade());

        System.out.println(sql);
        pstmt.execute();
        conexao.close();

        return true;

    }

    public ArrayList<ItemPedido> buscarTodas(Pedido pedido) throws ClassNotFoundException, SQLException {
        ArrayList<ItemPedido> itens = new ArrayList<ItemPedido>();
        Connection conexao = null;

        conexao = ConectaBanco.getConexao();
        String sql = "select * from item_pedido where id_pedido=?";

        PreparedStatement pst = conexao.prepareStatement(sql);
        System.out.println("número do pedido "+ pedido.getId());
        pst.setInt(1, pedido.getId());
        ResultSet rs = pst.executeQuery();

        ProdutoDAO produtoDAO = new ProdutoDAO();

        while (rs.next()) {
            ItemPedido itemPedido = new ItemPedido();

            itemPedido.setId(rs.getInt("id"));
            System.out.println(rs.getString("codigo_produto"));
            itemPedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getString("codigo_produto")));
            itemPedido.setQuantidade(rs.getInt("quantidade"));
            itemPedido.setValor(rs.getDouble("valor"));

            itens.add(itemPedido);
        }
        conexao.close();
        return itens;

    }

    public ItemPedido buscarPorCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from item_pedido where id=? ");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();

        ItemPedido itemPedido = new ItemPedido();

        ProdutoDAO produtoDAO = new ProdutoDAO();

        while (rs.next()) {
            itemPedido.setId(rs.getInt("id"));
            itemPedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getString("codigo_produto")));
            itemPedido.setQuantidade(rs.getInt("quantidade"));
            itemPedido.setValor(rs.getDouble("valor"));

        }
        return itemPedido;
    }
    
    
        public ItemPedido atualizarEstoque(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from item_pedido where id_pedido=? ");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();

        ItemPedido itemPedido = new ItemPedido();

        ProdutoDAO produtoDAO = new ProdutoDAO();

        while (rs.next()) {
            
            Produto produto = new Produto();
            
            produto = produtoDAO.buscarLoginByCodigo(rs.getString("codigo_produto"));
            System.out.println("Quantidade anterior"+produto.getQuantidade());
            produto.setQuantidade(produto.getQuantidade()+rs.getInt("quantidade"));
              System.out.println("Quantidade nova"+produto.getQuantidade());      
            produtoDAO.atualizar(produto);
            

        }
        return itemPedido;
    }
    

    public boolean atualizar(ItemPedido itemPedido) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "update item_pedido set codigo_produto=? ,valor=?, quantidade=? where id=?";

        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setString(1, itemPedido.getProduto().getCodigo());
        pstmt.setDouble(2, itemPedido.getValor());
        pstmt.setInt(3, itemPedido.getQuantidade());
        pstmt.setInt(4, itemPedido.getId());

        System.out.println(sql);
        pstmt.execute();

        conexao.close();
        return true;

    }

    public boolean apagar(int id) throws SQLException {

        Connection conexao = ConectaBanco.getConexao();

        String sql = "delete from item_pedido where id = ?";
        PreparedStatement pstmt = conexao.prepareCall(sql);

        pstmt.setInt(1, id);

        pstmt.execute();

        conexao.close();
        return true;

    }
    
    public ArrayList<ItemPedido> buscarPorPedido(int id_pedido) throws ClassNotFoundException, SQLException {
        ArrayList<ItemPedido> itenspedidos = new ArrayList<ItemPedido>();
        Connection conexao = null;
        System.out.println("dao item pedido");    
        conexao = ConectaBanco.getConexao();
        
        String sql = "SELECT * FROM item_pedido where id_pedido=?";
        
               
        
        PreparedStatement pst = conexao.prepareStatement(sql);
        
        pst.setInt(1, id_pedido);


        ResultSet rs = pst.executeQuery();

        ProdutoDAO produtoDAO = new ProdutoDAO();
        while (rs.next()) {
            ItemPedido itempedido = new ItemPedido();

            itempedido.setId(rs.getInt("id"));      
            itempedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getString("codigo_produto")));
            itempedido.setValor(rs.getInt("valor"));
            itempedido.setQuantidade(rs.getInt("quantidade"));
      

            itenspedidos.add(itempedido);
        }
        conexao.close();
        return itenspedidos;

    }
}
